Golang调用系统命令时如何指定执行路径(切换目录)? | 您所在的位置:网站首页 › go mod命令 › Golang调用系统命令时如何指定执行路径(切换目录)? |
先看一个场景,假如从代码托管平台(github、gitlab、gitee等)克隆一个Golang项目,使用git clone完成以后,需要切换(cd)到这个项目里面去做一些操作,例如使用go mod download安装依赖包。 这一系列操作如果使用程序来实现的话还是有一点不同的,特别是切换到项目目录的动作。人工操作的话直接执行 cd dst-path 命令即可,使用程序调用 cd 系统命令这么做却是无效的。 Golang中的实现方法Golang中调用系统命令的方法是这样的,以上面的git clone为例: package mainimport "os/exec" func main() { err := exec.Command("git", "clone", "https://github.com/xxx/test").Run() if err != nil { panic(err) }} 接下来就需要切换到这里的 test 目录去执行 go mod tidy 命令了,你可能会想到这么实现: package mainimport "os/exec" func main() { err := exec.Command("git", "clone", "https://github.com/xxx/test").Run() if err != nil { panic(err) } err = exec.Command("cd", "./test").Run() if err != nil { panic(err) } err = exec.Command("go", "mod", "download").Run() if err != nil { panic(err) }} 到这里你就错了,在程序里这么写是不会生效的,可以执行代码看看效果。正确的方式应该这么写: package mainimport "os/exec" func main() { err := exec.Command("git", "clone", "https://github.com/xxx/test").Run() if err != nil { panic(err) } cmd := exec.Command("go", "mod", "download") cmd.Dir = "./test" err = cmd.Run() if err != nil { panic(err) }} |
CopyRight 2018-2019 实验室设备网 版权所有 |